import java.util.Arrays;

/**
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * <p>
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作
 * <p>
 * 示例 1:
 * <p>
 * 输入: nums = [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 */
public class LeetCode283 {

    public static void main(String[] args) {
        int[] c = {0, 1, 0, 3, 12};
        moveZeros(c);
        Arrays.stream(c).forEach(System.out::print);
    }
//## 前后指针
//- 快慢相等值不变，慢针不动快针走
//- 快慢不等值，我是题型1，慢针向前一步走，快针赋值给慢针， 快针向前走一步
//- 快慢不等值，我是题型2，快针慢针值互换，慢针向前一步走，快针向前一步走

    public static void moveZeros(int[] nums) {
        int slow = 0, fast = 0;
        while (fast < nums.length) {
            if (nums[fast] != 0) {
                //快针慢针值互换
                int temp = nums[fast];
                nums[fast] = nums[slow];
                nums[slow] = temp;
                //慢针向前一步走，
                slow++;
            }
            //快针向前一步走 ,这里fast++放最后是因为不管 nums[fast]等不等于0 ，fast指针都需要往前走的
            fast++;
        }
    }
}
